#include<iostream>
#include<mm_malloc.h> // window上 #include<malloc.h>
using namespace std;
#define m 2

// 定义List结构
struct List
{
	// 动态数组 -- 存储首地址
	int *data;
	
	// 长度 -- 表示List含有多少元素
	int length;
	
	// 容量 -- 表示List占据多少内存
	int capacity;
};

// 初始化List
void Init(List& L)
{
	// List初始容量
	L.capacity=m;
	
	// 初始数组
	L.data=new int[L.capacity];
	
	// 初始长度
	L.length=0;
}

// List扩容
void Expand(List& L)		
{
	// p指向数组
	int *p=L.data;
	
	// 设置新容量
	L.capacity=2*L.length;
	
	// 开辟新内存，实现数组扩容
	L.data=new int[L.capacity];
	
	// 复制原先的元素
	for(int i=0;i<L.length;i++)
		L.data[i]=p[i];
	
	// 删除原先数据
	delete p;
}

// List添加元素
void Add(List& L,int e)
{
	// 如果超过容量
	if(L.length==L.capacity){
		// 扩容
		Expand(L);
	}
	
	// 添加数据
	L.data[L.length]=e;
	
	// 改变长度
	L.length++;
}

// 打印信息
void disp(List& L)
{
	printf("L: ");
	for(int i=0;i<L.length;i++)
		printf("%d ",L.data[i]);
	printf("\n");
}

int main ()
{
	// 创建列表
	List L;
	
	// 初始化列表
	Init(L);
	
	// 打印信息
	printf("长度=%d,容量=%d\n",L.length,L.capacity);
	
	for(int i=1;i<=10;i++)
	{
		printf("插入%d ",i); 
		
		// 添加元素
		Add(L, i);
		
		printf("长度=%d,容量=%d  ",L.length,L.capacity);
		
		// 打印信息
		disp(L);
	}

	return 0;
}
